// 引入云数据库和工具函数
const db = uniCloud.database();
const _ = db.command;

/**
 * 添加壁纸云函数
 * 功能：保存新的壁纸信息到数据库，支持图片URL存储和分类关联
 */
exports.main = async (event, context) => {
  try {
    // 1. 验证管理员权限（从上下文获取）
    const adminId = context.uid || context.OPENID;
    // if (!adminId) {
    //   return {
    //     code: 401,
    //     message: '需要管理员权限',
    //     data: null
    //   };
    // }
    
    // 获取客户端信息
    const clientInfo = context.clientInfo || {};
    
    // 2. 参数验证
    const { title, categoryId, description, tags, imageUrl } = event;
    
    if (!title || !categoryId || !imageUrl) {
      return {
        code: 400,
        message: '缺少必要参数：标题、分类ID和图片URL',
        data: null
      };
    }
    
    if (title.trim().length > 50) {
      return {
        code: 400,
        message: '标题长度不能超过50个字符',
        data: null
      };
    }
    
    // 3. 验证分类是否存在
    const categoryRes = await db.collection('categories').doc(categoryId).get();
    if (!categoryRes.data || !categoryRes.data[0]._id) {
      return {
        code: 404,
        message: '指定的分类不存在'+JSON.stringify(categoryRes),
        data: null
      };
    }
    
    // 4. 准备壁纸数据
    const wallpaperData = {
      title: title.trim(),
      categoryId,
      categoryName: categoryRes.data.name,
      description: description ? description.trim().substring(0, 200) : '',
      tags: tags ? 
        tags.trim()
          .split(',')
          .map(tag => tag.trim())
          .filter(tag => tag && tag.length <= 20)
          .slice(0, 10) : [], // 限制最多10个标签，每个不超过20字符
      imageUrl,
      thumbnailUrl: imageUrl, // 可以后续优化生成缩略图
      status: event.status || 'pending', // 默认待审核状态
      views: event.views || 0,
      downloads: event.downloads || 0,
      favorites: event.favorites || 0,
      likes: 0,
      createTime: new Date(),
      updateTime: new Date(),
      uploadBy: adminId,
      metadata: {
        resolution: event.resolution || 'unknown',
        fileSize: event.fileSize || 0,
        aspectRatio: event.aspectRatio || '16:9'
      }
    };
    
    // 5. 开始事务处理
    const transaction = await db.startTransaction();
    
    try {
      // 保存壁纸信息到数据库
      const result = await transaction.collection('wallpapers').add(wallpaperData);
      
      if (!result || !result.id) {
        await transaction.rollback();
        throw new Error('添加壁纸失败');
      }
      
      // 更新分类的壁纸数量
      await transaction.collection('categories').doc(categoryId).update({
        wallpaperCount: _.inc(1)
      });
      
      // 记录操作日志
      await transaction.collection('admin_logs').add({
        adminId,
        adminName: '管理员',
        action: 'ADD_WALLPAPER',
        target: `壁纸ID: ${result.id}`,
        content: `添加了新壁纸: ${wallpaperData.title}`,
        ip: clientInfo.clientIP || '',
        userAgent: clientInfo.userAgent || '',
        createTime: Date.now()
      });
      
      // 提交事务
      await transaction.commit();
      
      // 6. 返回成功结果
      return {
        code: 0,
        message: '添加壁纸成功',
        data: {
          ...wallpaperData,
          _id: result.id
        }
      };
      
    } catch (err) {
      // 事务失败时回滚
      await transaction.rollback();
      throw err;
    }
    
  } catch (error) {
    console.error('添加壁纸失败:', error);
    
    // 错误处理，返回友好信息
    let errorMessage = '添加壁纸失败，请稍后重试';
    if (error.message) {
      errorMessage = error.message;
    }
    
    return {
      code: 500,
      message: errorMessage,
      data: null
    };
  }
};